Computers are used to perform a variety of tasks. Computers typically accomplish tasks using by processing software applications. Often, computer users desire to communicate with other computer systems or with other computer users. Many software applications facilitate intercommunication with other computer systems or other computer users. Most software applications capable of communication with other computer systems rely heavily on operating system (OS) resources. OS resources may include device drivers, hard drive read/write functions, processor allocation, processes, data files, and other resources provided by the OS.
Many software applications utilize OS resources by means of processes and threads. For example, in order to accomplish Task A, the software application may instantiate one or more processes where each process is intended to perform one or more tasks. Moreover, each process may instantiate threads to accomplish subtasks within the process. For example, if Task A was an Instant Messaging (IM) application, the (IM) application may initiate a process to initiate and control communication between the IM application and a separate (possibly remote) IM application. The communication process may initiate a thread to control, for example, notification of when a message has been sent or has arrived. Complex processes may instantiate a large number of threads. These threads can be any type of thread including kernel threads, user threads, primary threads, or other types. The above example is a simplistic overview of how an IM application may implement processes and threads. Actual IM and other applications may use hundreds or thousands of processes and/or threads to accomplish various tasks.
Software applications cannot, however, use an unlimited number of processes and threads to accomplish the tasks envisioned by the developer. Software applications consume computer system resources. Computer system resources may include processing time, random access memory (RAM) and page-file usage, hard-drive storage space, bus use, controllers, and other computer system resources. Applications, such as an IM application often require the use of multiple computer system resources. As a result, software application developers typically aim to keep computer system resource requirements to a minimum. Many times, however, the magnitude of the application (i.e. the large number of available functions) leads a developer to use more computer system resources than otherwise preferred.
Problems may arise when multiple processes are initiated. For example, when multiple processes are involved, security problems may be introduced such as man-in-the-middle attacks. Other problems include remoteability. For example, if one process needs to communicate with another process and that process is located on a remote computer system. Traditional software communication between processes or applications typically involves multiple resource-consuming processes. Such processes include user level inter-process communication (IPC), access control lists (ACLs), additional security modules, kernel objects, application programming interfaces (APIs) and other resources that must be organized and released at the end of the communication.